package com.eliaukjq.xunlianying.duoxianchengjichu;

import java.util.concurrent.TimeUnit;

/**
 * @Author : 佩萁
 * Description :
 * @Create : 2024/7/20 - 21:00
 */
public class Main {
    /**
     * PrintTime 类用于测量代码段的执行时间。
     * 它利用 ThreadLocal 来存储开始时间，从而可以在同一个线程中的不同位置获取时间差。
     */
    private static class PrintTime {
        /**
         * 用于存储代码段开始时间的 ThreadLocal 变量。
         */
        public static final ThreadLocal<Long> TIME_THREADLOCAL_OBJECT = new ThreadLocal<>();

        /**
         * 记录当前时间作为代码段的开始时间。
         */
        public static final void begin() {
            TIME_THREADLOCAL_OBJECT.set(System.currentTimeMillis());
        }

        /**
         * 计算自开始时间以来的经过时间。
         *
         * @return 自开始时间以来的毫秒数。
         */
        public static final long end() {
            return System.currentTimeMillis() - TIME_THREADLOCAL_OBJECT.get();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        PrintTime.begin();
        // 模拟一个持续2秒的操作
        TimeUnit.SECONDS.sleep(2);
        long time = PrintTime.end();
        // 输出计算出的时间差
        System.out.println(time + "毫秒");
    }
}